import apiClient from './client'
import type { User, LoginRequest, RegisterRequest } from '@/types'

const isDev = import.meta.env.DEV

function mockResponse<T>(data: T): Promise<{ data: { code: number; msg: string; data: T } }> {
  return Promise.resolve({
    data: {
      code: 200,
      msg: 'OK',
      data,
    },
  })
}

export const authService = {
  // ===== 用户认证与个人中心模块 (/api/v1/user) =====
  // 注意：此模块已迁移到新的分离式登录系统
  // 新的登录入口：/auth (选择页面) -> /auth/login (用户登录)

  // 用户注册
  register: (userData: RegisterRequest) => apiClient.post<User>('/api/v1/user/register', userData),

  // 用户登录 - 新的分离式登录系统
  login: (credentials: LoginRequest) =>
    apiClient.post<{ token: string; user: User; expiresIn: number }>(
      '/api/v1/user/login',
      undefined,
      { params: credentials },
    ),

  // 用户退出登录
  logout: () => apiClient.post('/api/v1/user/logout'),

  // 验证用户 token（用于刷新后自动登录）
  verifyToken: () => {
    return apiClient.post<boolean>('/api/v1/user/verify-token')
  },

  // 获取用户个人信息
  getProfile: () => apiClient.get<User>('/api/v1/user/profile'),

  // 更新用户个人信息
  updateProfile: (userData: Partial<User>) =>
    apiClient.post<User>('/api/v1/user/update-profile', {
      id: userData.id || null,
      username: userData.username || null,
      password: null, // 密码不更新
      nickname: userData.nickname || null,
      realName: userData.realName || null,
      email: userData.email || null,
      phone: userData.phone || null,
      avatarUrl: userData.avatarUrl || null,
      gender: userData.gender || null,
      status: userData.status || null,
      lastLoginAt: userData.lastLoginAt || null,
      createdAt: userData.createdAt || null,
      updatedAt: userData.updatedAt || null,
      birthday: userData.birthday || null,
    }),

  // 修改用户密码
  changePassword: (oldPassword: string, newPassword: string) =>
    apiClient.post('/api/v1/user/change-password', undefined, {
      params: { oldPassword, newPassword },
    }),

  // ===== 管理员模块 (/api/admin) =====
  // 注意：此模块已迁移到新的分离式登录系统
  // 新的登录入口：/auth (选择页面) -> /auth/admin-login (管理员登录)

  // 管理员登录
  adminLogin: (credentials: LoginRequest) =>
    apiClient.post<
      | { code: number; msg: string; data: { token?: string; username?: string } }
      | { token?: string; username?: string }
    >('/api/admin/login', undefined, {
      params: credentials,
    }),

  // 管理员退出登录
  adminLogout: () => apiClient.post('/api/admin/logout'),

  // 管理员Token校验
  adminVerifyToken: () => apiClient.post<boolean>('/api/admin/verify-token'),
}

export default authService
